package com.liu.recursive;

public class RecursiveTest2 {
    public static void main(String[] args) {
        int res = arraysSum(new int[]{1, 2, 3, 4, 5}, 0);
        System.out.println(res);

        System.out.println("--------------------------------------------");
        System.out.println(reverse("abcd",3));

        System.out.println("--------------------------------------------");
        System.out.println(fib(4));
    }

    /**
     * 对arr中的所有元素求和
     * 找重复：
     * 找变化：变化的量应该作为参数
     * 找边界：出口
     *
     * @param arr
     * @param begin
     * @return arr数组的和
     */
    static int arraysSum(int[] arr, int begin) {
        if (begin == arr.length - 1){
            return arr[begin];
        }
        return arr[begin] + arraysSum(arr, begin + 1);
    }

    /**
     * 反转字符串
     * @param src
     * @param end
     * @return
     */
    static String reverse(String src,int end){
        if (end == 0){
            return "" + src.charAt(0);
        }
        return src.charAt(end) + reverse(src,end - 1);
    }

    /**
     * 斐波那契序列
     * 1 1 2 3 5
     * @param n
     * @return
     */
    static int fib(int n){
        if (n == 1 || n == 2){
            return 1;
        }
        return fib(n - 1) + fib(n - 2);
    }
}
